package entretenimiento.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;

import entretenimiento.excepcion.DAOExcepcion;
import entretenimiento.modelo.Mensaje;
import entretenimiento.util.ConexionBD;

public class MensajeDAO extends BaseDAO {
	
	public Mensaje insertar(Mensaje objMensaje) throws DAOExcepcion {
		String query = "insert into mensaje(descripcion, fecha, hora) values (?,?,?)";
	Connection con = null;
	PreparedStatement stmt = null;
	ResultSet rs = null;
	
	try {
		con = ConexionBD.obtenerConexion();
		stmt = con.prepareStatement(query);
		stmt.setString(1, objMensaje.getDescripcion());
		stmt.setString(2, objMensaje.getFecha());
		stmt.setString(3, objMensaje.getHora());
			
		
		int i = stmt.executeUpdate();
		if (i != 1) {
			throw new SQLException("No se pudo insertar mensaje");
		}
		// Obtener el ultimo id
		int id = 0;
		query = "select last_insert_id()";
		stmt = con.prepareStatement(query);
		rs = stmt.executeQuery();
		if (rs.next()) {
			id = rs.getInt(1);
		}

		objMensaje.setIdmensaje(id);
		
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
	
		return objMensaje;
	}
	
	public void ValidarContenidoMensaje(String descripcion) 
			throws DAOExcepcion {
		
		String msg = "";
		
		try {
		if (descripcion == null || descripcion.isEmpty())
		msg = "El mensaje no puedo ser nullo o en blanco, Favor de ingrese mensaje";
		
		if (! msg.isEmpty())
		throw new SQLException(msg);
		
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}
	
	}
	
	public void valiarTamanoMensaje(String descripcion) throws DAOExcepcion {
		String msg = "";
		
		try {
		if (descripcion.length()>140)
		msg = "El mensaje no puedo ser mayor a 140 caracteres";
		
		if (! msg.isEmpty())
		throw new SQLException(msg);
		
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		}
	}
	
	public Collection<Mensaje> listarMensajes() throws DAOExcepcion {
		
		Collection<Mensaje> mensajeList = new ArrayList<Mensaje>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			String query = "select  idmensaje, descripcion, fecha, hora from mensaje;";
			stmt = con.prepareStatement(query);
			rs = stmt.executeQuery();
			while (rs.next()) {
				Mensaje me = new Mensaje();
				me.setIdmensaje(rs.getInt("idmensaje"));
				me.setDescripcion(rs.getString("descripcion"));
				me.setFecha(rs.getString("fecha"));
				me.setHora(rs.getString("hora"));
				mensajeList.add(me);
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return mensajeList;
	}
	
}
